from django.conf import settings
from django.core.files.storage import FileSystemStorage
from fdfs_client.client import Fdfs_client


class FdfsStorage(FileSystemStorage):
    """自定义文件存储系统类"""

    def _save(self, name, content):
        """
        当用户通过django管理后台上传文件时,调用此方法保存文件到FastDFS服务器中
        :param name: 传入的文件名
        :param content: 文件内容
        :return: 上传文件的路径
        """
        # todo: 自定义存储：保存文件到FastDFS服务器
        client = Fdfs_client('meiduo_mall/utils/fastdfs/client.conf')
        dict_data = client.upload_by_buffer(content.read())

        if 'Upload successed.' != dict_data.get('Status'):
            raise Exception('上传文件到FastDFS失败')

        # 获取文件id: # group1/M00/00/02/wKjSoFwIpLCANlDAAAAFvzivcH414 会保存到mysql数据库
        path = dict_data.get('Remote file_id')
        return path

    # 重写父类url方法
    def url(self, name):
        """
        返回文件的完整url路径
        :param name: 数据库中保存的文件名，类似：group1/M00/00/02/wKhYgFwM082Ab2osAAAQ7colEzw3605917
        :return:完整的url路径
        """
        # return name  # 默认方式
        return settings.FDFS_URL + name